import { DateFormat, TagProps } from '.'
import { Widget } from '../models'

/** 签章类型: 签名/印章/日期 */
export enum SignType {
  /** 签名 */
  SIGNATURE = 'signature',

  /** 印章 */
  SEAL = 'seal',

  /** 日期 */
  DATE = 'date'
}

/** 签章数据 */
export interface SignData {
  /** 签章 id */
  id?: string

  /** 签章名称 */
  name?: string

  /** 图片地址 */
  img?: string

  /** 规格说明 */
  specs?: string

  /** 宽 */
  w?: number

  /** 高 */
  h?: number

  /** 自定义类名 */
  className?: string

  /** 标签 */
  tag?: string | TagProps

  /** 是否默认 */
  default?: boolean

  /** 是否禁用 */
  disabled?: boolean

  // eslint-disable-next-line
  [key: string]: any
}

/** 签章状态 */
export interface SignState {
  /** 当前签章是否禁用 */
  disabled: boolean

  /** 当前签章是否可拖拽 */
  draggable: boolean

  /** 当前签章是否选中 */
  selected: boolean

  /** 当前签章是否指定 */
  assigned: boolean
}

/** 日期章数据 */
export interface DateSign {
  /** 图片地址 */
  img?: string

  /** 字体大小 */
  fontSize: number

  /** 日期格式 */
  dateFormat: DateFormat

  // eslint-disable-next-line
  [key: string]: any
}

/**
 * 签章配置选项
 * @description 可配置日期章图片地址、日期章全局配置、签章全局切换、签章自定义 class 等
 */
export interface SignOptions {
  /** 签章自定义 class */
  signClassName?: (sign: SignData) => string | void

  /** 签章控件标签 */
  signTag?: (widget: Widget) => string | TagProps | void

  /**
   * 签章选择时的签章标签
   * @description `widget` 存在则为更换控件印章选择，否则为全局选择
   */
  signSelectTag?: (sign: SignData, type: SignType, state: SignState, widget?: Widget) => string | TagProps | void

  /** 是否允许切换签章 */
  signChangeable?: (widget: Widget) => boolean

  /** 签署时是否允许调整签章尺寸，默认为 `false` */
  signResizable?: boolean | ((widget: Widget) => boolean)

  /** 签章是否全局切换 */
  signGlobal?: boolean

  /**
   * 日期章图片地址
   * @description 如果日期章数据 `widget.sign` 未设置 `img`，则可使用该选项统一设置日期章图片地址
   */
  dateSignSrc?: string | ((widget: Widget) => string | void)

  /** 是否开启日期章设置，默认为 `true` */
  dateSignSetting?: boolean | ((widget: Widget) => boolean)

  /** 日期章是否全局配置 */
  dateSignGlobal?: boolean
}
